package sort;


import java.util.Arrays;
import java.util.Comparator;

/*
* 快速排序
* */
public class FaseSort {

    public static void main(String[] args) {
        /*
        //1、创建一个空的字符数组
        获取原字符数组中的第一个字符   如果新数组为空则直接插入
        获取下一个字符 判断：首先判断是否为字母 如果是  跟上一个字符判断，如果上一个字符不为非字母且不是空格 而且比当前字母大 则交换
        交换后继续往前循环  直到不符合条件或者循环到头
        * */

        Integer[] arr= {2,3,1,4,6,5,8,7,9};
        Arrays.sort(arr,new MyComp());
        for (int x: arr){
            System.out.println(x);
        }

    }

    public static class MyComp implements Comparator<Integer>{
        @Override
        public int compare(Integer o1, Integer o2) {
            System.out.println(o2 -o1);
            return o2 - o1;
        }
    }

    public static char[] printString(String str){
        //首先把字符串变为字符数组
        char[] chars=str.toCharArray();
        StringBuffer stringBuffer=new StringBuffer();
        int p;  //指向需要比较的数
        int la;  //指向
        for (int a=1;a<chars.length;a++){
            //如果这个数和上一个数都为字母而且字典顺序比上一个数小  则执行交换
            p=a;   //p是指向当前新进的数
            la=p-1;   //la是指向p左边准备和p交换的数
            while (la >-1 && p>0 && getIndex(chars[p])==1){
                if (getIndex(chars[la])==1 && compareToLast(chars[la],chars[p])) {   //如果前面一个数也是字母 交换
                    swap(chars, la, p);
                    p--;
                    la--;
                }else if(getIndex(chars[la])==0 || !compareToLast(chars[la],chars[p])){
                    la--;
                }
            }
        }
        return chars;

    }
    /*跟上一个字符比较  如果小则返回true   大于或者等于则返回fasle
    * */
    public static boolean compareToLast(char last,char index){
        String la=String.valueOf(last);
        String ind=String.valueOf(index);
        return la.compareToIgnoreCase(ind)>0 ? true : false;   //如果last比index字典顺序小 则返回true；
    }

    //0表示空格或者非字母
    public static int getIndex(char c){
        if (c==' '){
            return 0;
        }
        int num=(int)c;
        return ((num>64 && num<91) || (num>96 && num<123 )) ? 1 : 0;
    }

    public static void swap(char[] arr,int a,int b){
        char temp=arr[a];
        arr[a]=arr[b];
        arr[b]=temp;
    }

    //快排1.0
    public static void quick_1_0(int[] arr,int l,int r){

    }

    //在left - right上  以right作为划分值  小于等于arr[right]的放左边 大于的放右边
    public static void process(int[] arr,int left,int right){
        int p=left-1;
        int i=left;
        while (i<right){
            if (arr[i]<=arr[right]){
                swap(arr,p+1,i);
                p++;
            }
                i++;
        }
        swap(arr,right,p+1);   //把大于区的第一个元素和比较值交换
        if (p>left) {
            process(arr, left, p);
        }
        if (p+2<right){
        process(arr,p+2,right);
        }
    }
    public static void swap(int[] arr,int a,int b){
        int temp=arr[a];
        arr[a]=arr[b];
        arr[b]=temp;
    }
}
